/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ppsa.dao;

import com.ppsa.bean.EmpleadoBean;
import com.ppsa.bean.PerfilBean;
import com.ppsa.bean.ReunionBean;
import com.ppsa.bean.UsuarioBean;
import com.ppsa.common.Constantes;
import java.util.List;


import java.sql.DriverManager;
import java.sql.ResultSet;
import java.util.ArrayList;
import org.apache.log4j.Logger;

/**
 *
 * @author AdminTdp
 */
public class ReunionDao extends AccesoDao {
    
    static final Logger m_log = Logger.getLogger(ReunionDao.class.getName());
    
    public ReunionDao() throws AccesoDaoException {
        super();
    }

    public List<ReunionBean> listarReunion(ReunionBean objA_reunionBean, UsuarioBean objL_usuario) throws Exception {
        List<ReunionBean> lstL_reunion = new ArrayList<ReunionBean>();


        ReunionBean objL_reunion = null;
        try {
            //this.objPt_conn = objPt_dataSource.getConnection();
            this.objPt_conn = DriverManager.getConnection(strpv_conexionUrl);
            String strl_procedure = "{ call ppsa_sp_listarReunion(?) }";
            objPt_cstmt = objPt_conn.prepareCall(strl_procedure);
            objPt_cstmt.setString(1, objL_usuario.getStrpv_codigoUsuario()); 
            objPt_rs = objPt_cstmt.executeQuery();
            while( objPt_rs.next() ) {
                objL_reunion = new ReunionBean();
                //System.out.println("--->" + objPt_rs.getString("NOMBRE"));
                objL_reunion.setStrpv_codigoReunion(objPt_rs.getString("ID_REUNION"));
                objL_reunion.setStrpv_nombreReunion(objPt_rs.getString("NOMBRE"));
                objL_reunion.setStrpv_descripcionReunion(objPt_rs.getString("DESCRIPCION"));
                objL_reunion.setStrpv_fechaReunion(objPt_rs.getString("FECHA_COMPLETA"));
                objL_reunion.setStrpv_numParticipante(objPt_rs.getString("NUM"));
                lstL_reunion.add(objL_reunion);
            }
        } catch ( Exception ex ) {
            ex.printStackTrace();
        } finally {
            closeCallableStatement(objPt_cstmt);
            closeResultSet(objPt_rs);
            closeConnection(objPt_conn);
        }

        return lstL_reunion;
    }
    public List<EmpleadoBean> obtenerListadoAsignacionEmpleado( String strpv_codigoAsignacion ) throws Exception {
        m_log.info("[obtenerListadoReunionEmpleado] << ENTER");
        List<EmpleadoBean> lstL_empleado = new ArrayList<EmpleadoBean>();
        EmpleadoBean objL_empleado = null;
        try{
            this.objPt_conn = DriverManager.getConnection(strpv_conexionUrl);
            String strl_procedure = "{ call ppsa_sp_obtenerAsignado(?) }";
            objPt_cstmt = objPt_conn.prepareCall(strl_procedure);
            objPt_cstmt.setInt(1, Integer.parseInt(strpv_codigoAsignacion));
            objPt_rs = objPt_cstmt.executeQuery();              
            while (objPt_rs.next()) {
                objL_empleado = new EmpleadoBean();
                objL_empleado.setStrpv_nombreEmpleado(objPt_rs.getString("NOMBRE"));
                objL_empleado.setStrpv_porcentaje(objPt_rs.getString("PORCENTAJE"));
                lstL_empleado.add(objL_empleado);
            }
        }catch ( Exception ex ) {
            ex.printStackTrace();
        } finally {
            closeCallableStatement(objPt_cstmt);
            closeResultSet(objPt_rs);
            closeConnection(objPt_conn);
        }
        m_log.info("[obtenerListadoReunionEmpleado] >> EXIT");
        return lstL_empleado;
    }
    public List<EmpleadoBean> obtenerListadoReunionEmpleado( String strpv_idReunion ) throws Exception {
        m_log.info("[obtenerListadoReunionEmpleado] << ENTER");
        List<EmpleadoBean> lstL_empleado = new ArrayList<EmpleadoBean>();
        EmpleadoBean objL_empleado = null;
        try{
            this.objPt_conn = DriverManager.getConnection(strpv_conexionUrl);
            String strl_procedure = "{ call ppsa_sp_obtenerReunionUsuario(?) }";
            objPt_cstmt = objPt_conn.prepareCall(strl_procedure);
            objPt_cstmt.setInt(1, Integer.parseInt(strpv_idReunion));
            objPt_rs = objPt_cstmt.executeQuery();              
            while (objPt_rs.next()) {
                objL_empleado = new EmpleadoBean();
                objL_empleado.setStrpv_codigoEmpleado(objPt_rs.getString("ID_USUARIO"));
                objL_empleado.setStrpv_nombreEmpleado(objPt_rs.getString("NOMBRE"));
                objL_empleado.setStrpv_fechaAsistencia(objPt_rs.getString("FECHA_ASISTENCIA"));
                objL_empleado.setStrpv_estadoEdicionAsistencia( objPt_rs.getString("EDICION") ); 
                objL_empleado.setStrpv_estadoAsistencia(objPt_rs.getString("ESTADO"));
                lstL_empleado.add(objL_empleado);
            }
        }catch ( Exception ex ) {
            ex.printStackTrace();
        } finally {
            closeCallableStatement(objPt_cstmt);
            closeResultSet(objPt_rs);
            closeConnection(objPt_conn);
        }
         m_log.info("[obtenerListadoReunionEmpleado] >> EXIT");
        return lstL_empleado;
    }
    public ReunionBean obtenerReunion(ReunionBean objA_ReunionBean) throws Exception {
        m_log.info("[obtenerReunion] << ENTER");
        ReunionBean objL_reunionBean  = new ReunionBean();
       

        try {
            //this.objPt_conn = objPt_dataSource.getConnection();
            this.objPt_conn = DriverManager.getConnection(strpv_conexionUrl);
            String strl_procedure = "{ call ppsa_sp_obtenerReunion(?) }";
            objPt_cstmt = objPt_conn.prepareCall(strl_procedure);
            m_log.info("ID REUNION ->" + Integer.parseInt(objA_ReunionBean.getStrpv_codigoReunion() ));
            objPt_cstmt.setInt(1, Integer.parseInt(objA_ReunionBean.getStrpv_codigoReunion()));
            objPt_rs = objPt_cstmt.executeQuery();
            while( objPt_rs.next() ) {
                objL_reunionBean.setStrpv_codigoReunion(objPt_rs.getString("ID_REUNION"));
                objL_reunionBean.setStrpv_nombreReunion(objPt_rs.getString("NOMBRE"));
                objL_reunionBean.setStrpv_descripcionReunion(objPt_rs.getString("DESCRIPCION"));
                objL_reunionBean.setStrpv_fechaReunion(objPt_rs.getString("FECHA"));
                objL_reunionBean.setStrpv_horaReunion(objPt_rs.getString("HORA"));
                objL_reunionBean.setStrpv_codigoEstado(objPt_rs.getString("ESTADO"));
                //objA_ReunionBean.setStrpv_e
            }
        } catch ( Exception ex ) {
            ex.printStackTrace();
        } finally {
            closeCallableStatement(objPt_cstmt);
            closeResultSet(objPt_rs);
            closeConnection(objPt_conn);
        }
        m_log.info("[obtenerReunion] >> EXIT");
        return objL_reunionBean;
    }

    public Integer actualizarReunion(ReunionBean objL_reunionBean) throws Exception {

        System.out.println("[ReunionDao/actualizarReunion] << ENTER");

        Integer intL_temp = -1;
        Integer intL_resultado = -1;
        try {
            //this.objPt_conn = objPt_dataSource.getConnection();
            this.objPt_conn = DriverManager.getConnection(strpv_conexionUrl);
            String strl_procedure = "{ call ppsa_sp_actualizarReunion( ?,?,?,?,?,?,? ) }";
            objPt_cstmt = objPt_conn.prepareCall(strl_procedure);

            if( objL_reunionBean.getStrpv_codigoReunion() != null && objL_reunionBean.getStrpv_codigoReunion().trim().length() > 0 ) {
                intL_temp = Integer.parseInt(objL_reunionBean.getStrpv_codigoReunion());
            }
            
            objPt_cstmt.setInt(1, intL_temp);
            objPt_cstmt.setString(2, objL_reunionBean.getStrpv_nombreReunion());
            objPt_cstmt.setString(3, objL_reunionBean.getStrpv_descripcionReunion());
            objPt_cstmt.setString(4, objL_reunionBean.getStrpv_fechaReunion());
            objPt_cstmt.setString(5, objL_reunionBean.getStrpv_horaReunion());
            objPt_cstmt.setString(6, objL_reunionBean.getStrpv_arrayParticipante());
            objPt_cstmt.registerOutParameter(7, java.sql.Types.INTEGER );

            intL_resultado = objPt_cstmt.executeUpdate();
          
            intL_resultado = objPt_cstmt.getInt(7);
            System.out.println("intL_resultado:=" + intL_resultado );
            
        } catch ( Exception ex ) {
            ex.printStackTrace();
        } finally {
            closeCallableStatement(objPt_cstmt);
            closeResultSet(objPt_rs);
            closeConnection(objPt_conn);
        }
        System.out.println("[ReunionDao/actualizarReunion] << EXIT");
        return intL_resultado;
    }

    public Integer registrarAsistenciaEmpleado( String strpv_codigoEmpleado, String strpv_codigoReunion ) throws Exception {
        m_log.info( "[registrarAsistenciaEmpleado] << ENTER" );
        Integer iTemp = -1;
        try {
            this.objPt_conn = DriverManager.getConnection( strpv_conexionUrl );
            String strl_procedure = "{ call ppsa_sp_registrarAsistenciaEmpleado( ?,? ) }";
            objPt_cstmt = objPt_conn.prepareCall( strl_procedure );
            objPt_cstmt.setInt( 1, Integer.parseInt( strpv_codigoReunion ) );
            objPt_cstmt.setString( 2, strpv_codigoEmpleado );

            iTemp = objPt_cstmt.executeUpdate();

            System.out.println( "intL_resultado:=" + iTemp );

        } catch ( Exception ex ) {
            ex.printStackTrace();
        } finally {
            closeCallableStatement( objPt_cstmt );
            closeResultSet( objPt_rs );
            closeConnection( objPt_conn );
        }
        m_log.info( "[registrarAsistenciaEmpleado] >> EXIT" );
        return iTemp;
    }



}
